//
// Created by sjjmw on 3/24/2022.
//
#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
#include "cmath"
#include<iomanip>
#include "string"
#include "map"
#include "list"

struct Sol{
    int get_cnt(int x,int y){
        int cnt=0;
        for(int dx=-1;dx<=1;dx++){
            for(int dy=-1;dy<=1;dy++){
                auto cur_x=x+dx;
                auto cur_y=y+dy;
                if(cur_x>=0&&cur_x<w
                    &&cur_y>=0&&cur_y<h
                ){
                    if(mat[cur_y][cur_x]=='*'){
                        cnt++;
                    }
                }
            }
        }
        return cnt;
    }
    std::vector<std::string> mat;
    int w;int h;
    void handle(int n,int m){
        h=n;
        w=m;
        std::string line;
        std::getline(std::cin,line);
        for(int i=0;i<n;i++){
            std::getline(std::cin,line);
            mat.push_back(line);
        }
        for(int i=0;i<mat.size();i++){
            for(int j=0;j<m;j++){
                if(mat[i][j]=='*'){
                    printf("*");
                }else{
                    printf("%d", get_cnt(j,i));
                }
            }
            printf("\n");
        }
    }
};
int main(){
    int a,b,c;
//    std::string str1,str2;
    int cnt=1;
    while (std::cin>>a>>b){
        if(a==0&&b==0){
            return 0;
        }
        printf("Field #%d:\n",cnt);

        Sol().handle(a,b);
        printf("\n");
        cnt++;
    }
    return 0;
}